#include <astree/xabstractsyntaxtreeset.h>

XAbstractSyntaxTreeSet::XAbstractSyntaxTreeSet(XTokenPtr inputToken):
    XAbstractSyntaxTreeN<2>(inputToken) {
    setName(L"set");
}

bool XAbstractSyntaxTreeSet::invokeImpl(std::shared_ptr<XVariableTable> table) {
    auto varNode = getChildAt(0);
    auto valueNode = getChildAt(1);

    if (!valueNode->invoke(table))
        return false;

    auto value = valueNode->getResult();

    if (!swtichVariableTable(table, varNode->getToken()->getModuleName(), varNode->getToken()->getLineNumber()))
        return false;

    if (!table->setVariable(varNode->getToken()->getString(), value))
        return false;

    result = value;
    return true;
}
